

package com.liang.manage.auth.facade.server;

import com.github.pagehelper.PageInfo;
import com.liang.manage.auth.facade.dto.user.UserDTO;
import com.liang.manage.auth.facade.dto.user.UserEmailDTO;
import com.liang.manage.auth.facade.dto.user.UserListDTO;
import com.liang.manage.auth.facade.dto.user.UserLoginDTO;
import com.liang.manage.auth.facade.dto.user.UserPasswordDTO;
import com.liang.manage.auth.facade.dto.user.UserRoleOrgDTO;
import com.liang.manage.auth.facade.dto.user.UserSearchDTO;
import com.liang.manage.auth.facade.dto.user.UserStateDTO;
import com.liang.manage.auth.facade.dto.user.UserTokenDTO;
import com.liang.nansheng.common.auth.UserSsoDTO;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public interface UserService {
    /**
     * 需要将用户ID:名称（id:name）更新到 Redis
     *
     * @param userId
     * @param name
     */
    void needUpdateUserIdNameToRedis(Long userId, String name);

    /**
     * 从Redis按用户ID获取用户名称
     *
     * @param userid
     * @return
     */
    String getNameByIdFromRedis(Long userid);

    UserTokenDTO login(UserLoginDTO userLoginDTO);

    UserTokenDTO register(UserDTO userDTO);

    UserTokenDTO registerAuth(UserDTO userDTO);

    Boolean isExpired(String token);

    UserTokenDTO generateUserToken(Long userid, String username);

    UserSsoDTO getUserSsoDTOByToken(String token);

    Boolean verifyToken(String token);

    Long getClaim(String token);

    String innerLoginUrl(String referer);

    PageInfo<UserListDTO> getList(UserSearchDTO userSearchDTO);

    List<UserListDTO> getAllList();

    void logout(String token);

    Map<Integer, String> getGender();

    UserDTO getById(Long userid);

    List<UserDTO> getByIds(List<Long> userIds);

    List<UserDTO> getListByRoleId(Integer roleId);

    List<UserDTO> notUserOfThisRole(List<Integer> roleIds);

    Boolean updateUserRolesOrg(UserRoleOrgDTO userRoleOrgDTO, UserSsoDTO currentUser);

    Boolean changeStatus(UserStateDTO userStateDTO);

    Boolean uploadUserPicture(byte[] bytes, String sourceFileName, UserSsoDTO currentUser);

    UserListDTO getUserListById(Long userid);

    Boolean updateUserBasicInfo(UserDTO userDTO, UserSsoDTO currentUser);

    Boolean sendEmailVerifyCode(String email, UserSsoDTO currentUser);

    Boolean sendSmsVerifyCode(String phone, UserSsoDTO currentUser);

    Boolean bindEmail(UserEmailDTO userEmailDTO, UserSsoDTO currentUser);

    Boolean bindPhone(UserEmailDTO userEmailDTO, UserSsoDTO currentUser);

    Boolean untieEmail(UserSsoDTO currentUser);

    Boolean untiePhone(UserSsoDTO currentUser);

    Boolean updatePassword(UserPasswordDTO passwordDTO, UserSsoDTO currentUser);

    Boolean isValidEmail(String email);

    Boolean isValidPhone(String phone);

    List<UserListDTO> getNewUser();

    Map<String, Object> uploadCommonPicture(byte[] bytes, String sourceFileName, UserSsoDTO currentUser);

    void updateAllUserBaseRole();

    Boolean isValidUser(String userName, UserSsoDTO currentUser);

    void insertChatUser(String userName);

    void insertGroup(String id);

    Boolean isPhoneExist(String phone);

    Boolean isEmailExist(String email);

    Boolean phoneResetPassword(UserEmailDTO userEmailDTO);

    Boolean emailResetPassword(UserEmailDTO userEmailDTO);

    UserDTO getByPhone(String phone);

    UserDTO getByEmail(String email);

    void updateAllUserDefaultHead();

    Boolean checkIdempotent(String url, Integer timeout, TimeUnit timeUnit);
}
